AWS Amplify Gen 2 で認証関連メールを Amazon SES 経由での送信に変更する
いわさです。
AWS Amplify では Amplify UI の Authenticator コンポーネントを使うことで認証機能を簡単に組み込むことが出来ます。
Amazon Cognito UserPool が使用されるのですが、例えばサインアップ用の認証コードを発行する場合など、ユーザーにメールが送信される場合があります。
この時、デフォルトでは[email protected]
が送信元となります。
この送信元は Cognito ユーザープールデフォルトの E メール送信機能を使った場合のメールアドレスとなります。
Amplify に関係なく、Cognito ユーザープールのメッセージングタブの次の箇所から設定内容の確認が可能です。
開発中はこちらでも問題ない場合がありますが、実はこのデフォルト送信機能は運用環境での利用は想定されておらず、1 日に最大 50 通までしか送信出来ないという制限があります。
ということで、運用環境を考えバックエンドに Amplify Gen 2 に Cognto ユーザープールの E メール送信設定を変更してみます。
認証バックエンドの emailConfiguration を設定する
詳しい手順は以下でも紹介されています。が、コードが不足している部分があり本記事ではそのあたりを少し追記しています。
前提として Amazon SES の ID を用意しておきます。このあたりの手順は Amplify 上では行わないので割愛します。
なお、Amazon SES を運用環境で使用する場合はサンドボックス解除済みである必要もあるのでご注意ください。解除がまだの場合は以下などを参考に解除申請しましょう。
バックエンドリソース定義側で認証スタックに対してそのまま設定してやります。
import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { Stack } from 'aws-cdk-lib/core';
import { EmailIdentity } from 'aws-cdk-lib/aws-ses';
const backend = defineBackend({
auth
});
const { cfnUserPool } = backend.auth.resources.cfnResources
const authStack = Stack.of(cfnUserPool);
const email = EmailIdentity.fromEmailIdentityName(
authStack,
'EmailIdentity',
'mail1.tak1wa.com'
)
cfnUserPool.emailConfiguration = {
emailSendingAccount: "DEVELOPER", //COGNITO_DEFAULT | DEVELOPER
sourceArn: email.emailIdentityArn,
from: "[email protected]",
replyToEmailAddress: "[email protected]",
configurationSet: "hoge-config"
}
ユーザープールのemailConfiguration.emailSendingAccount
にDEVELOPER
を指定することで独自 ID を設定出来ます。COGNITO_DEFAULT
を設定した場合は省略時と同じです。
そのままですが、from
は FROM ヘッダ、replyToEmailAddress
は REPLY-TO ヘッダに設定されるメールアドレスです。
configurationSet
は任意なのですが、昨今の Amazon SES の機能を見る限りだととりあえず設定しておいたほうが吉です。後からトレースする時とか、あるいはちょっと高度な機能を活用する際に構成セット使いたい時が出てきます。
上記バックエンド定義をデプロイしました。Cognito ユーザープールのメッセージングタブを確認してみましょう。
Amazon SES 経由での送信に切り替わっていますね。
実際に Web アプリケーションでもサインアップしてみます。
次のようなメールが届きました。期待どおり反映されていますね。
さいごに
本日は AWS Amplify Gen 2 で認証関連メールの送信元メールアドレスなどをカスタマイズしてみました。
Cognito デフォルトメール機能で制限に引っかかるケースはたまにありますので、SES への切り替えとサンドボックス解除を忘れずにしておきましょう。